title: typescript文档1-Get Started
date: 2023.2.19
tags:


https://www.typescriptlang.org/zh/docs/handbook/typescript-from-scratch.html

2023.2.19 星期日

TypeScript for the New Programmer

JavaScript 的类型化超集

不过,TypeScript 与 JavaScript 是什么关系呢?

语法
TypeScript 是 JavaScript 的 超集 :因此 JS 语法是合法的 TS。<!– 语法是指我们编写文本以组成程序的方式。例如,这段代码有一个 语法 错误,因为它缺少一个 ):

类型
但是,TypeScript 是一个 类型化 的超集,意味着它添加了针对如何使用不同类型的值的规则。

运行时行为
TypeScript 保留了 JavaScript 的 运行时行为 。原则上,TypeScript 绝不 改变 JavaScript 代码的运行时行为。

擦除类型
粗略地说,一旦 TypeScript 的编译器完成了检查代码的工作,它就会 擦除 类型以生成最终的“已编译”代码

TypeScript for JavaScript Programmers

类型推断

定义类型

JavaScript 中已经有一些基本类型可用:boolean、 bigint、 null、number、 string、 symbol 和 undefined,它们都可以在接口中使用。TypeScript 将此列表扩展为更多的内容,例如 any (允许任何类型)、unknown (确保使用此类型的人声明类型是什么)、 never (这种类型不可能发生)和 void (返回 undefined 或没有返回值的函数)。

构建类型有两种语法: 接口和类型。 你应该更喜欢 interface。当需要特定功能时使用 type 。

组合类型

有两种流行的方法可以做到这一点:联合和泛型。
#### 联合
使用联合,可以声明类型可以是许多类型中的一种。
#### 泛型
泛型为类型提供变量。一个常见的例子是数组。没有泛型的数组可以包含任何内容。带有泛型的数组可以描述数组包含的值。
ts type StringArray = Array<string>; type NumberArray = Array<number>; type ObjectWithNameArray = Array<{ name: string }>; // # 声明自己使用泛型的类型 interface Backpack<Type> { add: (obj: Type) => void; get: () => Type; } // 这一行是一个简写,可以告诉 TypeScript 有一个常量,叫做`backpack`,并且不用担心它是从哪 // 里来的。 declare const backpack: Backpack<string>; // 对象是一个字符串,因为我们在上面声明了它作为 Backpack 的变量部分。 const object = backpack.get(); // 因为 backpack 变量是一个字符串,不能将数字传递给 add 函数。 backpack.add(23); // Argument of type 'number' is not assignable to parameter of type 'string'.


### 结构化的类型系统(structural type system)
TypeScript 的一个核心原则是类型检查基于对象的属性和行为(type checking focuses on the shape that values have)。

在结构化的类型系统当中,如果两个对象具有相同的结构,则认为它们是相同类型的。